/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.myproject.ordendigital.dao.hibernate;

import com.myproject.ordendigital.dao.ProductoDao;
import com.myproject.ordendigital.model.Producto;
import com.myproject.ordendigital.model.TipoProducto;

import java.util.List;
import java.sql.Blob;

import org.hibernate.Hibernate;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Component;

/**
 *
 * @author U900532
 */
@Component
public class ProductoDaoHibernate extends HibernateDaoSupport
        implements ProductoDao {

    @Autowired
    public ProductoDaoHibernate(SessionFactory sessionFactory) {
        setSessionFactory(sessionFactory);
    }

    @Override
    public List<Producto> obtenerListaProductos(Producto producto) {
        StringBuffer query = new StringBuffer("from Producto p where 1 = 1");

        
        if (producto.getDescripcion() != null
                && !producto.getDescripcion().isEmpty()) {
            query.append(" where upper(descripcion) like '%").append(producto.getDescripcion().toUpperCase()).append("%'");
        }
        /*
        if (producto.getTipoProducto().getIdTipProd() != null) {
            query.append(" and p.tipoProducto.idTipProd = ").append(producto.getTipoProducto().getIdTipProd());
        }*/   

        List<Producto> list = getHibernateTemplate().find(query.toString());
        return list;
    }

    @Override
    public Producto obtenerProductoById(Integer idProducto) {
        Producto producto = getHibernateTemplate().get(Producto.class, idProducto);
        return producto;
    }

    @Override
    public void guardarProducto(Producto producto) {

        if (producto.getImagen() != null
                && producto.getImagen().length > 0) {
            Blob deImagen = Hibernate.createBlob(producto.getImagen());
            producto.setDeImagen(deImagen);
        }

        getHibernateTemplate().saveOrUpdate(producto);
    }

    @Override
    public void eliminarProducto(Integer idProducto) {
        Producto producto = obtenerProductoById(idProducto);
        getHibernateTemplate().delete(producto);
    }

    //---------------------------------TipoProducto--------------------------------------------
    @Override
    public List<TipoProducto> obtenerListaTiposProductos() {
        StringBuffer query = new StringBuffer("from TipoProducto tp ");
        List list = getHibernateTemplate().find(query.toString());
        return list;
    }

    @Override
    public TipoProducto obtenerTipoProductoById(Integer idTipoProducto) {
        TipoProducto tipoProducto = getHibernateTemplate().get(TipoProducto.class, idTipoProducto);
        return tipoProducto;
    }

    @Override
    public void guardarTipoProducto(TipoProducto tipoProducto) {
        getHibernateTemplate().saveOrUpdate(tipoProducto);
    }

    @Override
    public void eliminarTipoProducto(Integer idTipoProducto) {
        TipoProducto tipoProducto = obtenerTipoProductoById(idTipoProducto);
        getHibernateTemplate().delete(tipoProducto);
    }
}
